Update google to read output=js
authorparkrrrr <parkrrrr@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 1 Mar 2005 22:00:06 +0000 (22:00 +0000)
committerparkrrrr <parkrrrr@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Tue, 1 Mar 2005 22:00:06 +0000 (22:00 +0000)
gpsbabel/google.c
gpsbabel/reference/google.js [new file with mode: 0644]
gpsbabel/reference/googmapjs.sh [new file with mode: 0644]
gpsbabel/testo
gpsbabel/xmlgeneric.c
gpsbabel/xmlgeneric.h

index 8b99ff2b8a0443aafb0a19e64b599dbe8e1d3529..e5879360d1fbdbb689f9291ca485f04fe3ba4cd0 100644 (file)
@@ -21,6 +21,7 @@
 
 static char *encoded_points = NULL;
 static char *encoded_levels = NULL;
+static char *script = NULL;
 
 FILE *fd;
 
@@ -42,16 +43,32 @@ google_read(void)
 }
 #else
 
-static xg_callback      goog_points, goog_levels, goog_poly_e;
+static xg_callback      goog_points, goog_levels, goog_poly_e, goog_script;
 
 static 
 xg_tag_mapping google_map[] = {
        { goog_points,  cb_cdata,       "/page/directions/polyline/points" },
        { goog_levels,  cb_cdata,       "/page/directions/polyline/levels" },
        { goog_poly_e,  cb_end,         "/page/directions/polyline" },
+       { goog_script,  cb_cdata,       "/html/head/script" },
        { NULL,         0,              NULL }
 };
 
+void goog_script( const char *args, const char **unused ) 
+{
+       if (args)
+       {
+               if ( script ) 
+               {
+                       script = xstrappend( script, args );
+               }
+               else
+               {
+                       script = xstrdup( args );
+               }
+       }
+}                      
+
 void goog_points( const char *args, const char **unused )
 {
        if (args)  
@@ -157,6 +174,22 @@ void
 google_read(void)
 {
        xml_read();
+       if ( script ) 
+       {
+               char *xml = strchr( script, '\'' );
+               char *end = NULL;
+               if ( xml ) {
+                       xml++;
+                       end = strrchr( xml, '\'' );
+                       if ( end ) {
+                               *end = '\0';
+                               xml_deinit();
+                               xml_init( NULL, google_map );
+                               xml_readstring( xml );
+                       }
+               }
+               xfree( script );
+       }
 }
 #endif
 
diff --git a/gpsbabel/reference/google.js b/gpsbabel/reference/google.js
new file mode 100644 (file)
index 0000000..de2e30b
--- /dev/null
@@ -0,0 +1,2 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"/><title>Google Maps - 233 S. Wacker, Chicago, IL to 1060 W. Addison, Chicago, IL</title><script type="text/javascript">//<![CDATA[
+function vpage_load() {if (window.parent && window.parent._load) {window.parent._load('<?xml version="1.0"?><page><title>233 S. Wacker, Chicago, IL to 1060 W. Addison, Chicago, IL</title><query>233 S. Wacker, Chicago, IL to 1060 W. Addison, Chicago, IL</query><center lat="41.913070" lng="-87.644435"/><span lat="0.068240" lng="0.023910"/><directions><source><address><line>233 S Upper Wacker Dr</line><line>Chicago, IL 60606</line></address></source><destination><address><line>1060 W Addison St</line><line>Chicago, IL 60613</line></address></destination><polyline numLevels="4" zoomFactor="32"><points>mnr~F`p{uOy@@Y?]@}EH}B@gCD??W?eBBwA@a@A{BDeCBuBDY?m@?_AG??QGWWcD_G?S?eB?eD?aH??e@A[?kC???uGJaD?{CDcDDkA@sABcD@}CBaD@_DBkEBgGBcGH}FHcGHaGBwCBwJNgKHaHFoKF??gHFo@A??SKOQMa@??cCnAqE~BuCxAcExBoJxE??}A`A{FbDgJnEeJrEuFxCuBdAsFtCe@VaAf@_Bp@sCxAYLkDfBWVe@l@Yn@oC|A_CfAaB|@w@`@cAXeAF??uDfCgDlCs@l@mClBQLaDdCyGbF}@p@??wDpCqDvCmJxGcCfB}EzDyCxB??[ReFrD_EbD_C|A??AkD</points><levels>B?????BB??????@??BB?@@???BB??BB?????@?????@?????@??BB?BB?@BB????@??@?@????@???@?@@@??@@A?@?????????@?@@?????BBB</levels></polyline><segments meters="8443" seconds="543" distance="5.2 mi" time="9 mins"><segment id="seg0" pointIndex="0" meters="332" seconds="21" distance="0.2 mi" time="21 secs">Head  <b>north</b> from <b>S Upper Wacker Dr</b></segment><segment id="seg1" pointIndex="7" meters="422" seconds="27" distance="0.3 mi" time="27 secs">Continue on <b>N Upper Wacker Dr</b></segment><segment id="seg2" pointIndex="18" meters="406" seconds="26" distance="0.3 mi" time="26 secs">Bear <b>right</b> at <b>W Upper Wacker Dr</b></segment><segment id="seg3" pointIndex="26" meters="114" seconds="7" distance="0.1 mi" time="7 secs">Turn <b>left</b> at <b>N La Salle St</b></segment><segment id="seg4" pointIndex="30" meters="2597" seconds="167" distance="1.6 mi" time="2 mins">Continue on <b>N La Salle Blvd</b></segment><segment id="seg5" pointIndex="52" meters="191" seconds="12" distance="0.1 mi" time="12 secs">Continue on <b>N La Salle Dr</b></segment><segment id="seg6" pointIndex="55" meters="40" seconds="3" distance="0.0 mi" time="2 secs">Bear <b>right</b> at <b>W Eugenie St</b></segment><segment id="seg7" pointIndex="59" meters="4269" seconds="274" distance="2.7 mi" time="4 mins">Turn <b>left</b> at <b>N Clark St</b></segment><segment id="seg8" pointIndex="109" meters="71" seconds="5" distance="0.0 mi" time="4 secs">Turn <b>right</b> at <b>W Addison St</b></segment></segments></directions></page>', window.document);}}//]]></script></head><body onload="vpage_load()"><input id="zoom" type="text" value=""/><input id="centerlat" type="text" value=""/><input id="centerlng" type="text" value=""/></body></html>
\ No newline at end of file
diff --git a/gpsbabel/reference/googmapjs.sh b/gpsbabel/reference/googmapjs.sh
new file mode 100644 (file)
index 0000000..6ce5318
--- /dev/null
@@ -0,0 +1,5 @@
+
+FROM="233 S. Wacker, Chicago, IL"
+TO="1060 W. Addison, Chicago, IL"
+wget -O - "http://maps.google.com/maps?q=$FROM to $TO&output=js" 2>/dev/null
+
index c1c154d9ac97796c70f18a24aad82f3718551d0d..fa01bc0f15e7936ebce6ef99bcb690c93b1f04ed 100755 (executable)
@@ -575,6 +575,10 @@ rm -f ${TMPDIR}/google.out
 ${PNAME} -i google -f reference/google.xml -o arc -F ${TMPDIR}/google.out
 compare ${TMPDIR}/google.out reference/google.arc
 
+rm -f ${TMPDIR}/google.out
+${PNAME} -i google -f reference/google.js -o arc -F ${TMPDIR}/google.out
+compare ${TMPDIR}/google.out reference/google.arc
+
 #
 # XCSV "human readable" tests
 #
index 37dd183fe9f993b42e165936d600a802eb4eb443..9aaf231734e0b382e45bfc6aa9629e4f4198cb64 100644 (file)
@@ -220,10 +220,23 @@ void xml_read(void)
        
 }
 
+void xml_readstring( char *str ) 
+{
+       int len = strlen(str);
+       if (!XML_Parse(psr, str, len, 1)) {
+               fatal( MYNAME ":Parse error at %d: %s\n",
+                               XML_GetCurrentLineNumber(psr),
+                               XML_ErrorString(XML_GetErrorCode(psr)));
+       }
+       XML_ParserFree(psr);
+}
+
 void
 xml_init(const char *fname, xg_tag_mapping *tbl)
 {
-       ifd = xfopen(fname, "r", MYNAME);
+       if (fname) {
+               ifd = xfopen(fname, "r", MYNAME);
+       }
 
        current_tag = vmem_alloc(1,0);
        *((char *)current_tag.mem) = '\0';
index e1e00d1ff17b0587570300e24dfa5126e29db13f..ec66ae0d3d998057ad31c24924883d80cb392454 100644 (file)
@@ -45,4 +45,5 @@ void xml_write_time(FILE *ofd, const time_t timep, char *elname);
 
 void xml_init(const char *fname, xg_tag_mapping *tbl);
 void xml_read(void);
+void xml_readstring(char *str);
 void xml_deinit(void);